#include <mips/regdef.h>
#include <sys/syscall.h>
# Programa que calcula y devuelve el maximo comun 
# divisor entre dos numeros ingresados por parametro.

# mcd es una funcion 'leaf' que no requiere la construccion
# de un stack frame

	.globl 		mcd
	.ent 		mcd

mcd:
	subu	sp, sp, 32
	sw	$fp, 28(sp)
	sw	gp, 24(sp)
	move	$fp, sp
	
	sw	a0, 32($fp)
	sw	a1, 36($fp)
	lw	t0, 32($fp)
	lw	t1, 36($fp)
loop:
	div	t0, t1			# carga en Hi el resultado de t0 mod t1.
	mfhi	t2			# mueve el contenido en Hi al reg t2.
	bne	t2, zero, start
	move	v0, t1

	move	sp, $fp			# destruyo stack
	lw	$fp, 28(sp)
	addu	sp, sp, 32
	j	ra

start:
	move	t0, t1
	move	t1, t2
	b	loop

	.end 	mcd
